package SecondeStage.Collection.Map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapSource {
    public static void main(String[] args) {
        Map map =new HashMap();
        map.put("n01","张无忌");
        map.put("n02","韩顺平");
        // 1.k-v 最后是HashMap$Node node = newNode(hash,key,value,null)
        // 2.k-v 为了方便程序员遍历，还会创建EntrySet集合,该集合存放的元素的类型是Entry，而一个Entry对象就有k，v EntrySet<Entry<K,V>>
        // 即 transient Set<Map.Entry<K,V>> entrySet
        // 3.EntrySet中，定义的类型是 Map.Entry,但是实际上存放的还是HashMap$Node.这是因为HashMap$Node implement Map.Entry
        // 4.当把HashMap$Node对象存放到 entrySet 就方便我们的遍历，因为entrySet提供了两个重要的方法:getKey()和getValue()
        Set set = map.entrySet();
        System.out.println(set.getClass()); // HashMap$EntrySet
        for (Object obj:set){
            System.out.println(obj.getClass());
            // 为了从HashMap$Node中取出k-v，先做一个向下转型
            Map.Entry entry = (Map.Entry)obj;
            System.out.println(entry.getKey()+" "+entry.getValue());
        }
    }
}
